package com.huitong.admin.system.mapper;

import com.github.pagehelper.Page;
import com.huitong.admin.system.domain.dto.UserPageDTO;
import com.huitong.admin.system.domain.po.UserPO;
import com.huitong.admin.system.domain.vo.UserVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 用户信息数据访问层
 *
 * @author fromdrowning
 * @date 2024/5/10 17:42
 */
@Mapper
public interface UserMapper {

    /**
     * 根据 学号 角色 判断该学号是否已存在
     * <p>
     * student admin teacher
     *
     * @param id   学号
     * @param role 角色
     * @return 存在int>=1 不存在int=0
     */
    int hasUser(@Param("id") Long id, @Param("role") String role);

    /**
     * 根据 学号 角色 新增用户信息
     * <p>
     * student teacher
     *
     * @param userPO 用户信息
     */
    void insertUser(UserPO userPO);

    /**
     * 根据 学号 角色 新增用户详细信息
     * <p>
     * student_info teacher_info
     *
     * @param userPO 用户信息
     */
    void insertUserInfo(UserPO userPO);

    /**
     * 根据 学号 角色 查询用户信息
     * <p>
     * student teacher
     *
     * @param id   学号
     * @param role 角色
     * @return 用户信息
     */
    UserVO selectUser(@Param("id") Long id, @Param("role") String role);

    /**
     * 根据 学号 角色 学院号 专业号 班级号 查询用户信息
     * <p>
     * student teacher
     *
     * @param userPageDTO 分页信息
     * @return 分页信息
     */
    Page<UserVO> pageUser(UserPageDTO userPageDTO);

    /**
     * 根据 学号 角色 修改用户信息
     * <p>
     * student teacher
     *
     * @param userPO 用户信息
     */
    void updateUser(UserPO userPO);

    /**
     * 根据 学号 角色 新增删除用户信息
     * <p>
     * student_deleted teacher_deleted
     *
     * @param id   学号
     * @param role 角色
     */
    void insertUserDeleted(@Param("id") Long id, @Param("role") String role);

    /**
     * 根据 学号 角色 新增删除用户详细信息
     * <p>
     * student_info_deleted teacher_info_deleted
     *
     * @param id   学号
     * @param role 角色
     */
    void insertUserInfoDeleted(@Param("id") Long id, @Param("role") String role);

    /**
     * 根据 学号 角色 删除用户信息
     * <p>
     * student teacher
     *
     * @param id   学号
     * @param role 角色
     */
    void deleteUser(@Param("id") Long id, @Param("role") String role);

    /**
     * 根据 学号 角色 删除用户详细信息
     * <p>
     * student_info teacher_info
     *
     * @param id   学号
     * @param role 角色
     */
    void deleteUserInfo(@Param("id") Long id, @Param("role") String role);

}
